package com.zjdiepu.www.testUtil;

import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.crypto.hash.SimpleHash;
import org.apache.shiro.util.ByteSource;

import com.zjdiepu.www.base.enums.type.ResultFlagType;
import com.zjdiepu.www.common.util.MD5Util;
import com.zjdiepu.www.util.ExceptionHelper;

/**
 * 项目名称：dp-base <br/> 
 * 类名称：PasswordUtil <br/>  
 * 类描述： 密码生成工具<br/>    
 * 创建人：xiongxiaotun <br/> 
 * 创建时间：2017年3月29日 下午2:38:59  <br/>   
 * 修改人：xiongxiaotun <br/> 
 * 修改时间：2017年3月29日 下午2:38:59   <br/>  
 * 修改备注：    <br/> 
 * @version V1.0   <br/>
 */
public class PasswordTestUtil {
	
	/**
	 * @author xiongxiaotun <br/>
	 * @Title: getDbPassword  <br/>
	 * @Description: 获取数据库保存密码  <br/>
	 * @param loginName
	 * @param password
	 * @return
	 * @version V1.0  <br/>
	 */
	public static String getDbPasswordForNormal(String loginName, String password) {
		if(StringUtils.isBlank(password)) {
			ExceptionHelper.thow(ResultFlagType.PARAM_EMPTY);
		}
		return getDbPasswordForMd5(loginName, MD5Util.getMD5Encode(password));
	}
	
	/**
	 * @author xiongxiaotun <br/>
	 * @Title: getDbPassword  <br/>
	 * @Description: 获取数据库保存密码  <br/>
	 * @param loginName
	 * @param md5Password
	 * @return
	 * @version V1.0  <br/>
	 */
	public static String getDbPasswordForMd5(String loginName, String md5Password){
		if(!StringUtils.isNoneBlank(loginName, md5Password)) {
			 ExceptionHelper.thow(ResultFlagType.PARAM_EMPTY);
		}
		SimpleHash hash = new SimpleHash("md5", md5Password, loginName, 3);
		return hash.toBase64();
	}
	
	/**
	 * @author xiongxiaotun <br/>
	 * @Title: getEncodePassword  <br/>
	 * @param loginName
	 * @param password 密码(与存储密码加密需要一致)
	 * @param salt 盐值
	 * @param hashIterations 迭代次数
	 * @return
	 * @version V1.0  <br/>
	 */
	public static String getHashEncodePassword(String loginName, String password, String salt, int hashIterations){
		  if(!StringUtils.isNoneBlank(loginName, password, salt)) {
			  ExceptionHelper.thow(ResultFlagType.PARAM_EMPTY);
		  }
		  SimpleHash hash = new SimpleHash("md5", password,  
				  loginName + salt, hashIterations);  
		  String encodedPassword = hash.toBase64();
		  return encodedPassword;
	}
	
	/**
	 * @author xiongxiaotun <br/>
	 * @Title: getSaltWithName  <br/>
	 * @Description: 获取带名称盐值  <br/>
	 * @param userName
	 * @param salt
	 * @return
	 * @version V1.0  <br/>
	 */
	public static ByteSource getSaltWithName(String userName,  String salt) {
		if(!StringUtils.isNoneBlank(userName, salt)) {
			 ExceptionHelper.thow(ResultFlagType.PARAM_EMPTY);
		}
		return ByteSource.Util.bytes(userName + salt);
	}
	
	public static void main(String[] args) {
		System.out.println(MD5Util.getMD5Encode("123456"));
		System.out.println(getDbPasswordForNormal("admin", "cjgly123"));
	}
}
